package com.dries.portal.module.coupon.schedule;

import cn.hutool.json.JSONUtil;
import com.dries.portal.module.coupon.entity.Template;
import com.dries.portal.module.coupon.service.ITemplateService;
import com.dries.portal.module.coupon.vo.TemplateRule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Description: 定时清理已过期的优惠券模板
 * @Author ZSY
 * @createTime 2020/7/28 10:43
 */
@Slf4j
@Component
public class CacheCouponScheduledTask {

    @Resource
    private ITemplateService templateService;

    // 下线已过期的优惠券模板
    @Scheduled(fixedRate = 60 * 60 * 1000)
    public void offlineCouponTemplates() {
        log.info("开始清理已过期的优惠券模板！");
        List<Template> templates = templateService.findAllExpired(0);
        if (CollectionUtils.isEmpty(templates)) {
            log.info("执行完成！");
            return;
        }
        Date curr = new Date();
        List<Template> expiredTemplates = new ArrayList<>(templates.size());
        templates.forEach(e -> {
            // 根据优惠券模板规则中的“过期规则” 校验模板是否过期
            TemplateRule rule = JSONUtil.toBean(e.getRule(), TemplateRule.class);

            if (rule.getExpiration().getDeadline() != null && rule.getExpiration().getDeadline().compareTo(curr) < 0 ){
                e.setExpired(1);
                e.setAvailable(0);
                expiredTemplates.add(e);
            }
        });

        if (!CollectionUtils.isEmpty(expiredTemplates)) {
            log.info("下线优惠券模板数量{}",templateService.saveOrUpdateBatch(expiredTemplates));
        }

        log.info("执行完成！");
    }

}
